10.2 在main函数之前或者之后打印消息¶
全局对象的构造和析构函数¶
C++中全局对象的构造函数在main函数之前,析构函数执行在main函数之后。
#include<stdio.h>
class Foo {
public:
Foo() {
printf("Foo constructor\n");
}
~Foo() {
printf("Foo destructor\n");
}
};
Foo foo;
int main() {
printf("main start\n");
printf("main end\n");
return 0;
}
// 输出:
Foo constructor
main start
main end
Foo destructor
__attribute__的使用¶
#include<stdio.h>
void before_main() __attribute__((constructor));
void after_main() __attribute__((destructor));
void before_main() {
printf("before_main func\n");
}
void after_main() {
printf("after_main func\n");
}
int main() {
printf("main start\n");
printf("main end\n");
return 0;
}
// 输出:
before_main func
main start
main end
after_main func
使用atexit注册函数¶
#include<stdio.h>
#include<stdlib.h>
void after_main_1(void);
void after_main_2(void);
void after_main_1(void) {
printf("after_main_1\n");
}
void after_main_2(void) {
printf("after_main_2\n");
}
int main() {
printf("main start\n");
// 调用顺序与注册顺序相反
atexit(after_main_1);
atexit(after_main_2);
printf("main end\n");
return 0;
}
// 输出:
main start
main end
after_main_2
after_main_1
Reference¶
[1] https://blog.csdn.net/qq_43313035/article/details/88735476